package emailclient;

import java.util.ArrayList;
import java.util.Date;
import javax.swing.table.AbstractTableModel;
import javax.mail.*;
import javax.swing.*;
import javax.swing.table.*;

/**
 * @class MessagesTableModel
 * @brief управляет данными в таблице почтового ящика.
 * 
 * @version 1.0
 * @author Kazakov A.V.
 */
public class MessagesTableModel extends AbstractTableModel
{
	/**
	 * имена колонок таблицы
	 */
	private static final String[] columnNames = 
	{
		"Sender",
		"Subject",
		"Date"
	};

	/**
	 * список сообщений таблицы
	 */
	private ArrayList messageList = new ArrayList();

	/**
	 * установить список сообщений таблицы
	 * @param messages 
	 */
	public void setMessages(Message[] messages)
	{
		for(int i = messages.length - 1; i >= 0; i--)
		{
			messageList.add(messages[i]);
		}

		fireTableDataChanged();
	}

	/**
	 * получить сообщение с указанной строки
	 * @param row номер сообщения из списка
	 * @return сообщение с указанной строки
	 */
	public Message getMessage(int row)
	{
		return (Message) messageList.get(row);
	}

	/**
	 * удалить сообщение из списка
	 * @param row номер сообщения
	 */
	public void deleteMessage(int row)
	{
		messageList.remove(row);
		
		//	создать уведомление для таблицы об удалении строки
		fireTableRowsDeleted(row, row);
	}

	/**
	 * получить имена колонок
	 * @param col номер колонки
	 * @return название колонки
	 */
	@Override
	public String getColumnName(int col)
	{
		return columnNames[col];
	}

	/**
	 * получить число строк в таблице
	 * @return число строк
	 */
	@Override
	public int getRowCount()
	{
		return messageList.size();
	}

	/**
	 * получить число колонок в таблице
	 * @return число колонок в таблице
	 */
	@Override
	public int getColumnCount()
	{
		return columnNames.length;
	}

	/**
	 * получить комбинацию строки и колонки
	 * @param rowIndex номер строки
	 * @param columnIndex номер колонки
	 * @return строку из комбинации
	 */
	@Override
	public Object getValueAt(int rowIndex, int columnIndex)
	{
		try
		{
			Message	message = (Message)messageList.get(rowIndex);

			switch(columnIndex)
			{
				case 0:	//	отправитель
					Address[] senders = message.getFrom();
					
					if(senders != null || senders.length > 0)
					{
						return senders[0].toString();
					}
					else
					{
						return "[none]";
					}

				case 1:	//	описание
					String subject = message.getSubject();

					if(subject != null && subject.length() > 0)
					{
						return subject;
					}
					else
					{
						return "[none]";
					}

				case 2:	//	дата
					Date date = message.getSentDate();
					if(date != null)
					{
						return date.toString();
					}
					else
					{
						return "[none]";
					}
			}
		}
		catch(Exception e)
		{
			return "";
		}
		return "";
	}
}
